草庐IT

C++ make_shared 不可用

全部标签

c++ - 在 CPP 文件中使用 make 文件字符串变量

我在make文件中使用以下代码从CPP文件访问变量VENDOR_NAME。EXTRA_DEFINE+=-DVENDOR_NAME=$(VENDOR_NAME)VENDOR_NAME包含一个字符串。在我的cpp文件中,当我尝试使用此变量时,出现如下错误。coutFeature1.cpp.bak.cpp:8:'Default_Vendor'未声明(首先使用此功能)Feature1.cpp.bak.cpp:8:(每个未声明的标识符只报告一次我猜这是因为我的字符串不包含双引号并且编译器正在将VENDOR_NAME的内容视为变量。如何在我的CPP文件中将此变量作为字符串获取,以便我可以像使用#d

c++ - 使 QPushButton 不可见但仍然有效?

在我的项目中,我有一些按钮可以使用它在可见和不可见之间切换:ui->button->setVisible(true);//orui->button->setVisible(false);不过,好像隐身的时候也不起作用?我该如何解决这个问题?我已经试过了:ui->button->setEnabled(true);对于所有这些,但没有任何变化。 最佳答案 当您调用QWidget::setVisible(false)时,您不仅将它从View中隐藏,而且从逻辑上将它从布局中删除,因此它不再响应按键或鼠标点击。您想要的是将小部件保留在那里而不

c++ - 为什么 std::unique_ptr 没有像 std::shared_ptr 那样的别名构造函数?

我刚刚发现std::shared_ptr的“别名构造函数”并发现自己在问“为什么std::unique_ptr没有相应的构造函数?也就是说,如果你想分配一个Foo这样你就可以传递它的Bar应该完全管理Foo生命周期的函数的成员,能够这样做不是很好吗?#includestructB{}structA{Bb;}voidf(std::unique_ptrb);std::unique_ptra=std::make_unique();std::unique_ptrb{std::move(a),&(a->b)};//anowinvalid.f(std::move(b));//fnowrespons

【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

我们在Windows中编写C/C++程序时,常用的VS2019是一个集成开发环境,包含了很多工具包。而在Linux下开发,大部分的情况下都是使用一个个独立的工具。比如:编写代码用vim,编译代码用gcc,调试代码用gdb。一、编辑器-vim为什么选择使用vim呢?因为vim是所有Linux环境下自带的。vi/vim的区别简单点来说,它们都是多模式编辑器。不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于xwindow、macos、windows。这里统一选择按照 vim 来进行讲解。1、vi

c++ - std::shared_ptr 的用法

如何将std::shared_ptr用于double组?此外,使用shared_ptr的优点/缺点是什么。 最佳答案 这取决于你追求的是什么。如果您只想要一个可调整大小的double数组,请使用std::vector例子:std::vectorv;v.push_back(23.0);std::cout如果共享所述数组的所有权对您很重要,请使用例如std::shared_ptr>例子:std::shared_ptr>v1(newstd::vector);v1->push_back(23.0);std::shared_ptr>v2=v1

c++ map/set 迭代器不可取消引用

我想向您请教,因为我是初学者,在互联网上找不到合适的答案。我收到此错误:调试断言失败-映射/设置迭代器不可取消引用在看起来像这样的行:pointA=active->pointNext(timeNext);使用pointNext()函数,我看到一切正常,并且关注active,我有:active=setS.data.end();更多信息:active是multiset::const_iteratorsetS有:setS.Q、setS.W、setS.T和setS.data,其中setS.data在方括号内有0。当我在.cpp文件中有多重迭代器声明时,在调试期间我无法进入以查看事件内部的内容,

c++ - 在 direct3d11 对象上使用 std::shared_ptr 的自定义删除器

当我使用std::shared_ptr并需要一个自定义删除器时,我通常会创建一个对象的成员函数来促进它的销毁,如下所示:classExample{public:Destroy();};然后当我使用共享ptr时,我只是这样:std::shared_ptrptr(newExample,std::mem_fun(&Example::Destroy));问题是,现在我正在使用d3d11,我想将com发布函数用作std::shared_ptr自定义删除器,就像这样std::shared_ptrptr(nullptr,std::mem_fun(&ID3D11Device::Release));但是

c++ - std::make_signed 接受浮点类型

我有一个只能为标量类型(整数、float等)实例化的模板类,我希望成员typedef始终是该类型的已签名变体。即:unsignedint->signedintsignedlonglong->signedlonglong(已签名)unsignedchar->signedcharfloat->floatlongdouble->longdouble等等……不幸的是,std::make_signed仅适用于整数类型,不适用于浮点类型。最简单的方法是什么?我正在寻找usingSignedT=...;形式的东西,作为我的模板类的一部分,模板参数T已经保证是标量。 最佳答

C++ shared_ptr 释放所有权

这个问题在这里已经有了答案:Moveownershipfromstd::shared_ptrtostd::unique_ptr(1个回答)关闭7年前。我们都知道在C++中我们可以很容易地将unique_ptr转换为shared_ptr。但是,如果我进行了这样的转换怎么办:-unique_ptru=make_unique();//Xissomeclassshared_ptrs=move(u);//thisworksofcourse现在我想将s中指针的所有权转移回u。遗憾的是,shared_ptr中没有像unique_ptr中那样的release()函数,否则我可能不会这样做:-u.res

c++ - 在 map 中就地构建不可 move 的对象

我正在尝试在包含原子的映射中构造一个对象,因此它既不能复制也不能moveAFAICT。我的C++读物reference是mapemplace应该能够做到这一点。但是由于删除或不存在的构造函数,以下代码无法编译。使用make_pair没有帮助。#include#includeclassZ{std::atomici;};std::unordered_mapmap;voidtest(void){map.emplace(0,Z());//errormap[0]=Z();//error}这可能吗,如果不可能,为什么不呢?编辑:Linux上的编译器是gcc4.8.1 最